﻿using System;
using System.Web.Management;
using dao.commons;
using System.Data.SqlClient;
using System.Data.Common;
using System.Data;


namespace dao.daos
{
    public class ProductoDao : BaseDao, IDao
    {
        public ProductoDao(): base("PRODUCTO", "ID_PRODUCTO", true)
        {
        }

        public SqlDataReader ObtenerTodosColumnas(bool conBajas)
        {
            string comando = "select prod.ID_PRODUCTO, prod.CODIGO, prod.TIPO_PRODUCTO, tt.NOMBRE, prod.STOCK_MINIMO, prod.STOCK, prod.DESCRIPCION, prod.PRECIO_VENTA, prod.PRECIO_COSTO, prod.FECHA_ALTA, prod.DADO_BAJA";
            comando += " from PRODUCTO prod LEFT JOIN TIPO_TELA tt ON (prod.ID_TIPO_TELA=tt.ID_TIPO_TELA) ";

            if (conBajas == false)
                comando += " WHERE DADO_BAJA=0 ";

            SqlDataReader dr = traerDatosConsulta(comando);
            return dr;
        }

        public SqlDataReader ObtenerPorNombre(string filtro, bool conBajas)
        {
            Conectar();
            SqlDataReader dr = null;


                String comando = String.Format(
                                    @"select prod.ID_PRODUCTO, prod.CODIGO, prod.TIPO_PRODUCTO, tt.NOMBRE, prod.STOCK_MINIMO, prod.STOCK, prod.DESCRIPCION, prod.PRECIO_VENTA, prod.PRECIO_COSTO, prod.FECHA_ALTA
                                     from PRODUCTO prod LEFT JOIN TIPO_TELA tt ON (prod.ID_TIPO_TELA=tt.ID_TIPO_TELA)
                                     where prod.codigo LIKE '{0}%'", filtro);

                if (conBajas == false)
                    comando += " AND prod.DADO_BAJA = 0";

                dr = traerDatosConsulta(comando);
                return dr;
 
        }

        public SqlDataReader obtenerPorNombreYTela(string cod, int tela)
        {
            Conectar();
            SqlDataReader dr = null;


            String comando = String.Format(
                                @"select prod.ID_PRODUCTO, prod.CODIGO, prod.TIPO_PRODUCTO, tt.NOMBRE, prod.STOCK_MINIMO, prod.STOCK, prod.DESCRIPCION, prod.PRECIO_VENTA, prod.PRECIO_COSTO, prod.FECHA_ALTA
                                     from PRODUCTO prod LEFT JOIN TIPO_TELA tt ON (prod.ID_TIPO_TELA=tt.ID_TIPO_TELA)
                                     where prod.DADO_BAJA=0");

            if (cod != "")
                comando += string.Format(" AND prod.codigo LIKE '{0}%'", cod);
            if (tela > 0)
                comando += string.Format(" AND tt.ID_TIPO_TELA ={0}", tela);

            dr = traerDatosConsulta(comando);
            return dr;
        }

        public SqlDataReader obtenerPorNombreYProv(string filtro, int idProv)
        {
            Conectar();
            SqlDataReader dr = null;
            try
            {

                Cmd.CommandText = String.Format(
                                    @"select prod.ID_PRODUCTO, prod.CODIGO, prod.TIPO_PRODUCTO, tt.NOMBRE, prod.STOCK_MINIMO, prod.STOCK, prod.DESCRIPCION, prod.PRECIO_VENTA, prod.PRECIO_COSTO, prod.FECHA_ALTA
                                     from PRODUCTO prod LEFT JOIN TIPO_TELA tt ON (prod.ID_TIPO_TELA=tt.ID_TIPO_TELA)
                                     where prod.codigo LIKE '%{0}%' and prod.ID_PROVEEDOR = {1}", filtro, idProv);


                dr = Cmd.ExecuteReader(CommandBehavior.CloseConnection);
                return dr;
            }
            catch (Exception)
            {

                return dr;
            }

        }

        public bool ExisteCod(string cod)
        {
            bool existe = false;
            string comando = string.Format("Select * FROM PRODUCTO where CODIGO='{0}'", cod);
            SqlDataReader dr = traerDatosConsulta(comando);
            if (dr.HasRows)
            {
                existe = true;
            }
            return existe;
        }

        public SqlDataReader ObtenerPorPedido(int idPedido)
        {
            Conectar();
            try
            {
                Cmd.CommandText =
                    "SELECT PRODUCTO.ID_PRODUCTO, PRODUCTO.CODIGO, PRODUCTO.TIPO_PRODUCTO, TIPO_TELA.NOMBRE, PRODUCTO.STOCK_MINIMO, PRODUCTO.STOCK, PRODUCTO.DESCRIPCION, PRODUCTO.PRECIO_VENTA, PRODUCTO.PRECIO_COSTO, DETALLE_PEDIDO.CANTIDAD " +
                    "FROM  DETALLE_PEDIDO LEFT OUTER JOIN PEDIDO ON DETALLE_PEDIDO.ID_PEDIDO = PEDIDO.ID_PEDIDO LEFT OUTER JOIN PRODUCTO ON DETALLE_PEDIDO.ID_PRODUCTO = PRODUCTO.ID_PRODUCTO LEFT OUTER JOIN TIPO_TELA ON PRODUCTO.ID_TIPO_TELA = TIPO_TELA.ID_TIPO_TELA " +
                    "WHERE PEDIDO.ID_PEDIDO = " + idPedido;
                SqlDataReader dr = Cmd.ExecuteReader(CommandBehavior.CloseConnection);
                return dr;
            }
            catch (Exception e)
            {
                throw new SqlExecutionException("Error al obtener productos por pedido", e);
            }
        }

        public SqlDataReader obtenerPorProveedor(int idProv)
        {
            string comando = "select prod.ID_PRODUCTO, prod.CODIGO, prod.TIPO_PRODUCTO, tt.NOMBRE, prod.STOCK_MINIMO, prod.STOCK, prod.DESCRIPCION, prod.PRECIO_VENTA, prod.PRECIO_COSTO, prod.FECHA_ALTA, prod.DADO_BAJA";
            comando += " from PRODUCTO prod LEFT JOIN TIPO_TELA tt ON (prod.ID_TIPO_TELA=tt.ID_TIPO_TELA) ";
            comando += " WHERE prod.ID_PROVEEDOR = " + idProv;
            SqlDataReader dr = traerDatosConsulta(comando);
            return dr;
        }

    }
}
